
/*
 * (a)  (C) 1990 by Adobe Systems Incorporated. All rights reserved.
 *
 * (b)  If this Sample Code is distributed as part of the Display PostScript
 *	System Software Development Kit from Adobe Systems Incorporated,
 *	then this copy is designated as Development Software and its use is
 *	subject to the terms of the License Agreement attached to such Kit.
 *
 * (c)  If this Sample Code is distributed independently, then the following
 *	terms apply:
 *
 * (d)  This file may be freely copied and redistributed as long as:
 *	1) Parts (a), (d), (e) and (f) continue to be included in the file,
 *	2) If the file has been modified in any way, a notice of such
 *      modification is conspicuously indicated.
 *
 * (e)  PostScript, Display PostScript, and Adobe are registered trademarks of
 *	Adobe Systems Incorporated.
 * 
 * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
 *	CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
 *	AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
 *	ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
 *	OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
 *	WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
 *	WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
 *	DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, 
 *	FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
 *	OF THIRD PARTY RIGHTS.
 */

/*
*	iinterpreterhooks.m
 *
 *	Version:	2.0
 *	Author:	Ken Fromm
 *	History:
 *			03-07-91		Added this comment.
*/

#import "Graphic.h"
#import "FormatApp.h"
#import <objc/List.h>

extern void 	initGparms();

static UPath	*uPath;
static GParms  gParms;
static id		currentList;

void ii_resetPathStruct()
{
	uPath->num_pts = 0;
	uPath->num_ops = 0;
}

void ii_initPathStruct()
{
	uPath = [NXApp  getUpathBuffer];
	ii_resetPathStruct();
	currentList = NULL;
}

void ii_initGraphicStruct()
{
	initGparms(&gParms);
}

void ii_setgray(float  aval)
{
	gParms.gray = aval;
	gParms.color_type = GRAY;
}

void ii_setlinewidth(float  aval)
{
	gParms.linewidth = aval;
}

void ii_setlinejoin(int  aval)
{
	gParms.linejoin = (unsigned char) aval;
}

void ii_setdash()
{
	/* setdash not implemented */
}

void ii_setmiterlimit(float  aval)
{
	gParms.miterlimit = aval;
}

void ii_setlinecap(int  aval)
{
	gParms.linecap = (unsigned char) aval;
}

void ii_setrgbcolor(float  r, float g, float b)
{
	gParms.red = r;
	gParms.green = g;
	gParms.blue = b;
	gParms.color_type = RGB;
}

void ii_insertPathCoord(NXPoint *aPt, int num_pts, char dps_op, NXPoint *currentpoint)
{
	int	i;

	for (i = 0;  i < num_pts; i++, aPt++)
	{
		uPath->pts[uPath->num_pts++] = aPt->x;
		uPath->pts[uPath->num_pts++] = aPt->y;
	}

	uPath->ops[uPath->num_ops++] = dps_op;		
}

void ii_insertPath(int  path_type, NXRect *bounds)
{
	id		aGraphic;

	NXRect	bbox;

	if (uPath->num_ops > 0)
	{
		bbox = *bounds;
		if (path_type == STROKE)
			NXInsetRect(&bbox, -gParms.linewidth/2, -gParms.linewidth/2);

		aGraphic = [Graphic new];
		gParms.path_type = (unsigned char) path_type;
		[aGraphic  installGparms:&gParms];
		[aGraphic  installUpath:uPath  andBounds:&bbox];

		if (!currentList)
			currentList = [List new];

		[currentList  addObject:aGraphic];
	}
}

void ii_insertPage(int  page)
{	
	[[NXApp getDrawingView]  insertList:currentList];

	currentList = NULL;
}

